package com.inesv.api.baseclasses;

/**
 * creaete by liukeling
 * class name BaseRpcSend
 * 封装一些节点的基本信息，为发送rpc请求做准备
 */
public abstract class BaseRpcSend {
    /**
     * 钱包服务器的ip
     */
    protected String nodeRPCIP;
    /**
     * 钱包服务器的端口
     */
    protected String nodeRPCPort;
    /**
     * 钱包rpc用户名
     */
    protected String nodeRPCUser;
    /**
     * 钱包rpc密码
     */
    protected String nodeRPCPassword;

    /**
     * 构造方法  初始节点基本参数
     * @param nodeRPCIP          钱包服务器的ip
     * @param nodeRPCPort        钱包服务器的端口
     * @param nodeRPCUser        钱包rpc用户名
     * @param nodeRPCPassword    钱包rpc密码
     */
    public BaseRpcSend(String nodeRPCIP,String nodeRPCPort,String nodeRPCUser,String nodeRPCPassword){
        this.nodeRPCIP = nodeRPCIP;
        this.nodeRPCPort = nodeRPCPort;
        this.nodeRPCUser = nodeRPCUser;
        this.nodeRPCPassword = nodeRPCPassword;
    }

    /**
     * rpc准备发送请求
     * @param method    rpc方法名
     * @param params    rpc方法所需要的参数
     * @return    返回解析好的byte数组
     */
    public abstract byte[] prepareRequest(String method, Object[] params);

    /**
     * 根据请求内容请求rpc接口返回所需的结果
     * @param requestBody  rpc请求内容
     * @param url          rpc请求url
     * @return             返回rpc请求结果
     */
    public abstract String generateRequest(String requestBody, String url);

    /**
     * 获取该节点的rpcurl
     * @return  节点的rpcurl地址
     */
    public abstract String getNodeUri();

    /******************参数获取的方法*********************/

    public String getNodeRPCPassword() {
        return nodeRPCPassword;
    }

    public String getNodeRPCIP(){
        return nodeRPCIP;
    }

    public String getNodeRPCPort() {
        return nodeRPCPort;
    }

    public String getNodeRPCUser() {
        return nodeRPCUser;
    }
}
